package top.kaoshanji.p1ch11a;

import java.util.ArrayList;
import java.util.List;

/**
 * 代码清单-p1ch11a-101页a：车辆模型的抽象类
 * @author kaoshanji
 * ^_^
 * create time 2025/3/22 10:22
 */
public abstract class CarModel {

    // 这个参数是各个版本方法执行的顺序
    private List<String> sequence = new ArrayList<>();

    // 模型是启动开始跑了
    protected abstract void start();

    // 能发动，还要能停下来，那才是真本事
    protected abstract void stop();

    // 喇叭会出声音，是滴滴叫，还是哔哔叫
    protected abstract void alarm();

    // 引擎会轰隆隆地响，不响那是假的
    protected abstract void engineBoom();

    // 那模型应该会跑吧。别管是人推的，还是电力驱动的，总之要会跑
    public void run() {

        // 循环一遍，谁在前，就先执行谁
        for (int i = 0; i < this.sequence.size(); i++) {
            String actionName = this.sequence.get(i);
            
            if (actionName.equalsIgnoreCase("start")) {
                this.start(); // 启动汽车
            } else if (actionName.equalsIgnoreCase("stop")) {
                this.stop(); // 停止汽车
            } else if (actionName.equalsIgnoreCase("alarm")) {
                this.alarm(); // 喇叭开始叫了
            } else if (actionName.equalsIgnoreCase("engineBoom")) {
                this.engineBoom(); // 引擎开始轰鸣
            }
        }

    }

    // 把传递过来的值传递到类内
    public void setSequence(List<String> sequence) {
        this.sequence = sequence;
    }

}
